package Underworld_Survival;

import java.time.format.SignStyle;
import java.util.List;

import static Underworld_Survival.Game.padChineseText;
import static Underworld_Survival.Game.player;

// 精简版输出系统（专注状态与模板）
public class GameOutput {
    // 消息类型枚举
    public enum MsgType {
        BATTLE,    //战斗（敌人使用技能，玩家使用技能，等各种战斗过程描述的消息）
        EVENT,     //事件（房间事件描述，敌人出现前的场景描述）
        GET,       //收获（主角获得物品，或者购买物品）
        STATUS,    //状态（战时，战后属性状态，buff列表）
        GAME,      //小游戏
        SHOP,      //商店（商品列表）
        STORY,     //剧情（游戏剧情）
        MONOLOGUE, //角色台词
        SKILL,     //技能的所有描述
        EQUIPMENT, //装备的所有描述
        BAG,       //查看背包内容
        GAIN,      //永久增益描述
        SYSTEM,    //系统（系统消息）
        IMPORTANT, //重要（重要消息）
        WARNING,   //警告消息（boss来袭等,低血量等）
        INJURE,    //受伤（玩家或者敌人扣血）
        DIE,       //死亡（对手，角色死亡）
        RECOVER,   //恢复（血量，能量）
        REDUCE,    //消耗（血量，能量）
        INCREASE,  //增益（属性增强,获得有益buff,永久增益等）
        DECREASE   //减益（属性减弱,获得debuff）

    }
    //方案一
    public static String getColor(MsgType type) {
        switch (type) {
            // 战斗动态
            case BATTLE:    return BRIGHT_WHITE;  // 白色保持战斗信息清晰
            case SKILL:     return BRIGHT_MAGENTA; // 品红突出技能特效
            case INJURE:    return BRIGHT_RED;     // 亮红警示伤害
            case DIE:       return BG_BLOOD_RED + WHITE; // 血底白字强调死亡

            // 资源变动
            case GET:       return FOREST_GREEN;          // 金色表示珍贵收获
            case GAIN:      return FOREST_GREEN;   // 深绿表示永久增益
            case RECOVER:   return BRIGHT_GREEN;   // 亮绿表现恢复生机
            case REDUCE:    return ORANGE;         // 橙色提示资源消耗
            case INCREASE:  return BRIGHT_CYAN;    // 青色表示属性提升
            case DECREASE:  return DARK_RED;       // 暗红警示负面削弱

            // 系统交互
            case EVENT:     return LAVENDER;       // 淡紫渲染神秘事件
            case STATUS:   return BRIGHT_BLUE;    // 蓝色展示冷静数据
            case SHOP:     return BG_DARK_GRAY + GOLD; // 灰底金文字典商店
            case BAG:      return SILVER;          // 银色表现物品质感
            case EQUIPMENT:return BRIGHT_YELLOW;  // 亮黄高亮装备属性

            // 叙事内容
            case STORY:     return BRIGHT_CYAN; // 深蓝底白字叙事
            case MONOLOGUE: return BRIGHT_CYAN;    // 青色塑造角色台词

            // 系统提示
            case SYSTEM:    return WHITE;          // 默认系统消息
            case IMPORTANT: return BG_DARK_GRAY + GOLD; // 重要信息强化
            case WARNING:   return BRIGHT_RED;  // 红闪紧急警告BLINK + BRIGHT_RED
            case GAME:      return BRIGHT_MAGENTA; // 品红活跃小游戏氛围

            default:        return RESET;
        }
    }


//    //方案二
//    public static String getColor(MsgType type) {
//        switch (type) {
//            // 战斗动态（中性色调）
//            case BATTLE:    return SILVER;          // 银灰保持中立
//            case SKILL:     return LAVENDER;        // 淡紫营造技能神秘感
//            case INJURE:    return DARK_RED;        // 暗红警示但不过度刺激
//            case DIE:       return BG_DARK_GRAY + DARK_RED; // 深灰背景+暗红文字
//
//            // 资源变动（自然色调）
//            case GET:       return FOREST_GREEN;    // 森林绿表现自然获取
//            case GAIN:      return BRIGHT_CYAN;     // 浅青表示增益
//            case RECOVER:   return BG_GREEN + BLACK; // 淡绿背景黑字恢复提示
//            case REDUCE:    return ORANGE;          // 橙色类比夕阳/衰减
//            case INCREASE:  return DARK_BLUE;       // 深蓝表现属性沉淀
//            case DECREASE:  return BG_DARK_GRAY + SILVER; // 灰底银字减益
//
//            // 系统交互（功能性配色）
//            case EVENT:     return BRIGHT_BLACK;    // 深灰事件描述
//            case STATUS:    return BRIGHT_WHITE;    // 纯白数据展示
//            case SHOP:      return BG_DARK_GRAY + GOLD; // 灰底哑光金
//            case BAG:       return SILVER;          // 银色物品列表
//            case EQUIPMENT: return BG_BLUE + BRIGHT_WHITE; // 深蓝底白字装备
//
//            // 叙事内容（阅读友好）
//            case STORY:     return BRIGHT_BLACK;    // 深灰提升可读性
//            case MONOLOGUE: return LAVENDER;        // 淡紫区分角色台词
//
//            // 系统提示（温和警示）
//            case SYSTEM:    return BRIGHT_WHITE;
//            case IMPORTANT: return BG_DARK_GRAY + FOREST_GREEN; // 深灰底+森林绿
//            case WARNING:   return BG_BLOOD_RED + SILVER; // 暗红背景银字
//            case GAME:      return BRIGHT_BLUE;     // 深蓝保持专注
//
//            default:        return RESET;
//        }
//    }

    // 输出不同消息类型的消息
    public static void print(MsgType type, String msg) {
        System.out.print(getColor(type)+msg+RESET);}
    public static void println(MsgType type, String msg) {
        System.out.println(getColor(type)+msg+RESET);}
    // 支持任意参数的格式化输出
    public static void print(MsgType type,String template, Object... args) {
        System.out.printf(template, args);}
    public static void println(MsgType type,String template, Object... args) {
        System.out.printf(template + "\n", args);}

    // 消息模板库
    public static class Template {
        //public static final String
        public static final String loot = "获得%s";//获得战利品
        public static final String mUseSkill="%s使用%s,伤害："+YELLOW+"%d "+RESET;
        public static final String pUseSkill="你使用%s,伤害："+YELLOW+"%d "+RESET;
        public static final String mHPStatus="%s血量 %d/%d    ";
        public static final String pRefillHP="\uD83D\uDC96血量恢复 "+GREEN+"%d"+RESET+"（%d/%d）";
        public static final String refillAgi="能量恢复 "+GREEN+"%d"+RESET+"（%d/%d）";
        public static final String consumeAgi="能量消耗 %d";
        public static final String mRefillHP="%s血量恢复 %d（%d/%d）";
        public static final String inMaxHP="血量上限提升 %d";
        public static final String inMaxAgi="能量上限提升 %d";
        public static final String inStr="%s 力量提升 %d";
        public static final String deStr="%s 力量降低 %d";
        public static final String inDef="%s 防御提升 %d";
        public static final String deDef="%s 防御降低 %d";
        public static final String inEP="%s 速度提升 %d";
        public static final String deEP="%s 速度降低 %d";
        public static final String inCritRate="%s 暴击率提升 %f";
        public static final String deCritRate="%s 暴击率降低 %f";
        public static final String inCritMul="%s 暴击效果提升 %f";
        public static final String deCritMul="%s 暴击效果降低 %f";
        public static final String pGetBuff="你获得buff：%s%d   %s";//获得buff,最后是效果  getBuff
        public static final String mGetBuff="%s获得buff：%s%d   %s";
        public static final String pRefreshBuff="\uD83D\uDD04刷新buff：%s%d ";
        public static final String mRefreshBuff="%s\uD83D\uDD04刷新buff：%s%d ";

    }

    //玩家所有相关信息显示
    public static class ShowPlayer {
        //玩家基本属性信息basicProperty(血量等属性)
        public static void basicProperty() {
            StringBuilder sb = new StringBuilder();
            String HPColor;
            if(player.getCurrentHP()<(int)(player.getTotalMaxHP()*0.25)){//红色
                HPColor="\u001B[31m";
            }else if(player.getCurrentHP()<(int)(player.getTotalMaxHP()*0.6)){//黄色
                HPColor="\u001B[33m";
            }else{//绿色
                HPColor="\u001B[32m";
            }
            sb.append(String.format("❤\uFE0F"+HPColor+":%d"+RESET+"/%d  \uD83D\uDD0B:%d/%d  " +
                            "\uD83E\uDDBE:%d  \uD83D\uDEE1\uFE0F:%d  ⚡⚡:%d",
                    player.getCurrentHP(), player.getTotalMaxHP(), player.getCurrentAgi(), player.getTotalMaxAgi(),
                    player.getTotalStr(), player.getTotalDef(), player.getTotalEP()));
            System.out.println(sb.toString());
        }

        //玩家所有详细属性信息detailedProperty(血量等各种属性的详情)
        public static void detailedProperty() {
            StringBuilder sb = new StringBuilder();
            String HPColor;
            if(player.getCurrentHP()<(int)(player.getTotalMaxHP()*0.25)){//红色
                HPColor="\u001B[31m";
            }else if(player.getCurrentHP()<(int)(player.getTotalMaxHP()*0.6)){//黄色
                HPColor="\u001B[33m";
            }else{//绿色
                HPColor="\u001B[32m";
            }
            String formattedString = String.format("❤\uFE0F"+HPColor+":%d"+RESET+"/%d  \uD83D\uDD0B:%d/%d  " +
                            "\uD83E\uDDBE:%d  \uD83D\uDEE1\uFE0F:%d  ⚡⚡:%d  暴击率：%.2f  暴击效果：%.2f",
                    player.getCurrentHP(), player.getTotalMaxHP(), player.getCurrentAgi(), player.getTotalMaxAgi(),
                    player.getTotalStr(), player.getTotalDef(), player.getTotalEP(), player.getTotalCritRate(), player.getTotalCritMultiplier());
            sb.append(formattedString);
            System.out.println(sb.toString());
        }

        //玩家属性详情显示
        public static void detailedProperty1(){
            StringBuilder sb = new StringBuilder();
            String HPColor;
            if(player.getCurrentHP()<(int)(player.getTotalMaxHP()*0.25)){//红色
                HPColor="\u001B[31m";
            }else if(player.getCurrentHP()<(int)(player.getTotalMaxHP()*0.6)){//黄色
                HPColor="\u001B[33m";
            }else{//绿色
                HPColor="\u001B[32m";
            }
            String formattedString = String.format("❤\uFE0F"+HPColor+":%d"+RESET+"/%d  \uD83D\uDD0B:%d/%d  \n" +
                            "\uD83E\uDDBE:%d+%d  \uD83D\uDEE1\uFE0F:%d+%d  ⚡⚡:%d+%d  暴击率：%.2f+%.2f  暴击效果：%.2f+%.2f",
                    player.getCurrentHP(), player.getTotalMaxHP(), player.getCurrentAgi(), player.getTotalMaxAgi(),
                    player.getBaseStr(),player.getBonusStr(),player.getBaseDef(), player.getBonusDef(), player.getBaseEP(),
                    player.getBonusEP(),player.getBaseCritRate(), player.getBonusCritRate(),player.getBaseCritMultiplier(),player.getBonusCritMultiplier());
            sb.append(formattedString);
            System.out.println(sb.toString());
        }

        //玩家所有技能显示
        public static void skill() {
            if (!player.ability.getActiveSkill().isEmpty()) {
                System.out.println("技能：");
                for (int i = 1; i < player.ability.getActiveSkill().size(); i++) {
                    Skill activeSkill = player.ability.getActiveSkill().get(i);
                    System.out.println(i + ".✨" + activeSkill.getSkillName() + " " + '\t' + "消耗：" +
                            activeSkill.getConsumeAgi() + "能量" + '\t' + "效果：" + activeSkill.getSkillEffect());
                }
            } else {
                System.out.println("！！！没有任何技能！！！");
            }

        }

        //玩家所有装备展示
        public static void equipment() {
            if (!player.getWeaponSlot().hasWeapon()) {
                System.out.print("\uD83D\uDD2A武器槽：无    ");
            } else {
                System.out.print("\uD83D\uDD2A武器槽：" + player.getWeaponSlot().getEquippedItem().getName()+"    ");
            }
            if (!player.getArmorSlot().hasArmor()) {
                System.out.print("\uD83D\uDEE1\uFE0F防具槽：无    ");
            } else {
                System.out.print("\uD83D\uDEE1\uFE0F防具槽：" + player.getArmorSlot().getEquippedItem().getName()+"    ");
            }

            if (!player.getShoeSlot().hasShoe()) {
                System.out.print("👟鞋子槽：无    ");
            } else {
                System.out.print("👟鞋子槽：" + player.getShoeSlot().getEquippedItem().getName()+"    ");
            }
            System.out.println();
        }

        //玩家装备详细信息
        public static void equipmentDetailed(){
            if(player.getWeaponSlot().hasWeapon()){
                player.getWeaponSlot().getEquippedItem().showItem();
            }
            if(player.getArmorSlot().hasArmor()){
                player.getArmorSlot().getEquippedItem().showItem();
            }
            if(player.getShoeSlot().hasShoe()){
                player.getShoeSlot().getEquippedItem().showItem();
            }
        }

        //玩家战斗信息(血量,buff,技能)
        public static void battleStatus() {
            basicProperty();
            sharedInformation.showBuff(player);
            skill();
        }

        //玩家状态展示（血量,buff,技能，增益等）
        public static void status() {
            detailedProperty();
            sharedInformation.showBuff(player);
            skill();
        }

        //玩家金币，钻石，金币和钻石
        public static void gold(){System.out.println("你的"+CurrencyType.GOLD.getDescription()+
                "剩余："+player.bag.getGold());}
        public static void diamond(){System.out.println("你的"+CurrencyType.DIAMOND.getDescription()+
                "剩余："+player.bag.getDiamond());}
        public static void estate(){
            System.out.println("你的"+CurrencyType.GOLD.getDescription()+"："+player.bag.getGold()+
                    "\t"+CurrencyType.DIAMOND.getDescription()+"："+player.bag.getDiamond());
        }

        //玩家背包展示(查看背包物品)
        public static void checkBag(){player.bag.showBagHorizontally();}
        //展示所有食物，卷轴，道具，武器，防具，鞋子(用于装备或者使用)
        //............

        //玩家背包展示(售卖背包物品)
        public static void sellBag(){player.bag.showBagVertically();}

        //玩家背包详情(所有物品详细信息)
        public static void bagDetailed(){player.bag.showBagDetailed();}

        //玩家所有信息展示(背包，属性，增益，buff，技能)
        public static void info(){
            basicProperty();//所有属性信息
            sharedInformation.showBuff(player);//获得的临时buff
            skill();//技能
            equipment();//装备
            checkBag();//背包所有物品
        }

    }

    //敌人所有相关信息显示
    public static class ShowMonster {
            //展示名字和血量
            public static void currentHP(Monster m) {
                print(MsgType.STATUS,RESET+m.getName()+"生命值♠♠剩余：："+BLUE+m.getCurrentHP()
                +RESET+"/"+m.getTotalMaxHP());
            }

        }

    //玩家敌人共有信息显示
    public static class sharedInformation {
            //显示buff
            public static void showBuff(Role role) {
                if (!role.getBuff().isEmpty()) {
                    System.out.print(role.getName() + "Buff：");
                    for (int i = 0; i < role.getBuff().size(); i++) {
                        System.out.printf(role.getBuff().get(i).getName() + role.getBuff().get(i).getRemainingDuration() + "   ");
                    }
                    System.out.println();
                }
            }


        }

    //所有游戏界面的显示
    public static class GameUI {
            //进入游戏主界面
            public static void mainGameInterface(){
                String one = padChineseText(GREEN + "▶️ 1.新游戏" + RESET, 12);
                String two = padChineseText(CYAN + "📖 2.继续游戏" + RESET, 14);
                String three = padChineseText(BLUE + "ℹ️ 3.游戏介绍" + RESET, 14);
                String four = padChineseText(RED + "🚪 4.退出游戏" + RESET, 14);
                System.out.println(CYAN + "\t\t\t\t     ✦•······················•✦");
                System.out.println(YELLOW + "\t\t\t\t        \uD835\uDCE4\uD835\uDCF7\uD835\uDCED\uD835\uDCEE\uD835\uDCFB\uD835\uDD00\uD835\uDCF8\uD835\uDCFB\uD835\uDCF5\uD835\uDCED \uD835\uDCE2\uD835\uDCFE\uD835\uDCFB\uD835\uDCFF\uD835\uDCF2\uD835\uDCFF\uD835\uDCEA\uD835\uDCF5 ");
                System.out.println(CYAN + "\t\t\t\t     ✦•······················•✦" + RESET);
                System.out.println(CYAN + "\t\t╔════════════════════════════════════════════════╗" + RESET);
                System.out.printf( "\t\t║                "+GREEN+"%s"+CYAN+"                      ║\n", one);
                System.out.println(CYAN + "\t\t╠═════════════════════"+YELLOW+"✦⚔️✦"+CYAN+"══════════════════════╣" + RESET);
                System.out.printf( "\t\t║                "+CYAN+"%s"+CYAN+"                    ║\n", two);
                System.out.println(CYAN + "\t\t╠═════════════════════"+YELLOW+"✦🛡️✦"+CYAN+"══════════════════════╣" + RESET);
                System.out.printf( "\t\t║                "+BLUE+"%s"+CYAN+"                    ║\n", three);
                System.out.println(CYAN + "\t\t╠═════════════════════"+YELLOW+"✦📜✦"+CYAN+"══════════════════════╣" + RESET);
                System.out.printf( "\t\t║                "+RED+"%s"+CYAN+"                    ║\n", four);
                System.out.println(CYAN + "\t\t╚════════════════════════════════════════════════╝" + RESET);

            }
            //游戏循环主界面mainGameInterface
            public static void gameLoopInterface() {
                System.out.println(
                    YELLOW + "[" + BRIGHT_GREEN + "1" + RESET + YELLOW + "]➤" + CYAN + "下一房" +
                        YELLOW + " │ [" + BRIGHT_BLUE + "2" + RESET + YELLOW + "]🎒" + CYAN + "背包" +
                        YELLOW + " │ [" + BRIGHT_MAGENTA + "3" + RESET + YELLOW + "]📊" + CYAN + "状态" +
                        YELLOW + " │ [" + ORANGE + "4" + RESET + YELLOW + "]⚔" + CYAN + "装备" +
                        YELLOW + " │ [" + GOLD + "5" + RESET + YELLOW + "]🏪" + CYAN + "商店" +
                        YELLOW + " │ [" + BRIGHT_RED + "6" + RESET + YELLOW + "]🚪" + RED + "退出"+ RESET
                );

            }
            //游戏介绍
            public static void gameIntroduction(){
                System.out.println(BLUE+"这是一款暗黑风格的策略文字冒险游戏，玩家将坠入动态演变的冥界深渊，直面层层升级的生存挑战。\n" +
                        "游戏中，玩家需在随机触发的神秘事件中权衡抉择——无论是与属性随关卡指数强化的怪物博弈，\n" +
                        "还是在“命运轮盘”中押注资源与属性，每一次行动都关乎生死存亡。\n" +
                        "独创的“效果管理”系统精准掌控装备、技能与Buff的叠加规则，搭配47种特效组合与暴击策略，构建深度战斗体验。\n" +
                        "游戏融合Roguelike元素，关卡中穿插必出的神秘商人与治疗事件，缓解高压节奏。\n" +
                        "玩家可通过技能学习、道具合成与装备搭配，在“反伤灼烧”等战术中破局。\n" +
                        "极简的文字交互与智能引导，让硬核策略与沉浸叙事无缝交融。\n" +
                        "这是一场对资源管理、概率计算与人性的终极试炼，唯有智者方能窥见逃离地狱的渺茫曙光。"+RESET);
            }
            //背包界面backpackInterface
            public static void backpackInterface() {
                System.out.println(
                        BRIGHT_RED + "1.返回上级↩\uFE0F" + RESET + "  " +
                                GREEN + "2.使用食物\uD83C\uDF57" + RESET + "  " +
                                MAGENTA + "3.使用卷轴\uD83D\uDCDC" + RESET + "  " +
                                ORANGE + "4.使用道具\uD83D\uDD18" + RESET + "  " +
                                YELLOW + "5.售卖物品\uD83D\uDCB0" + RESET + "  " +
                                BLUE + "6.装备武器🗡️\n" + RESET +
                                BLUE + "7.装备防具\uD83D\uDEE1\uFE0F" + RESET + "  " +
                                BLUE + "8.装备鞋子👟" + RESET + "  " +
                                CYAN + "9.物品详情\uD83D\uDD0D" + RESET
                );
            }
            //状态界面statusInterface
            public static void statusInterface() {
                System.out.println(
                    BRIGHT_RED + "1.返回↩\uFE0F" + RESET + "  " +
                        BLUE + "2.属性详情\uD83D\uDD0D" + RESET + "  " +
                        GREEN + "3.增益详情\uD83D\uDD0D" + RESET + "  " +
                        MAGENTA + "4.使用卷轴\uD83D\uDCDC" + RESET
                );
            }
            //装备界面equipmentInterface
            public static void equipmentInterface() {
                System.out.println(
                        BRIGHT_RED + "1.返回上级↩\uFE0F" + RESET + "  " +
                                BLUE + "2.装备武器🗡️" + RESET + "  " +
                                BLUE + "3.装备防具\uD83D\uDEE1\uFE0F" + RESET + "  " +
                                BLUE + "4.装备鞋子👟" + RESET + "  " +
                                BRIGHT_CYAN + "5.装备详情\uD83D\uDD0D\n" + RESET +
                                RED + "6.卸下武器🗡️↓" + RESET + "  " +
                                RED + "7.卸下防具\uD83D\uDEE1\uFE0F↓" + RESET + "  " +
                                RED + "8.卸下鞋子👟↓" + RESET
                );
            }
            //商店界面storeInterface(展示所有商品)
            public static void storeInterface() {
                List<Item> goods = MerchantConfig.permanentGoods();//商人常驻物品
                for (int i = 0; i < goods.size(); i++) {
                    Item im = goods.get(i);
                    System.out.println(
                        BRIGHT_YELLOW + (i + 1) + "." + RESET +          // 序号
                            BRIGHT_WHITE + im.getName() + RESET + " " +  // 物品名称
                            WHITE + "\t━ " + RESET +                 // 分隔符
                            BRIGHT_YELLOW + im.getPriceOfPurchase() + RESET + // 价格数值
                            im.getPurchaseCurrency().getDescription()+ // 货币类型
                            SILVER + "\t「" + im.getIntroduction() + "」" + RESET // 介绍
                    );
                }
            }

        }

    // 模板消息输出
    public static void printTemplate(String template, Object... args) {
        System.out.print(String.format(template, args));
    }
    public static void printlnTemplate(String template, Object... args) {
        System.out.print(String.format(template, args));
    }

    // 带前缀的模板消息
    public static void printWithTag(String tag, String template, Object... args) {
        String msg = String.format("[%s] %s", tag, String.format(template, args));
            System.out.println(msg);
    }


    //颜色常量
    static final String RESET = "\u001B[0m";
    //基础16色常量
    // 标准前景色
    public static final String BLACK = "\u001B[30m";
    public static final String RED = "\u001B[31m";
    public static final String GREEN = "\u001B[32m";
    public static final String YELLOW = "\u001B[33m";
    public static final String BLUE = "\u001B[34m";
    public static final String MAGENTA = "\u001B[35m";
    public static final String CYAN = "\u001B[36m";
    public static final String WHITE = "\u001B[37m";

    // 亮色变体
    public static final String BRIGHT_BLACK = "\u001B[90m";
    public static final String BRIGHT_RED = "\u001B[91m";
    public static final String BRIGHT_GREEN = "\u001B[92m";
    public static final String BRIGHT_YELLOW = "\u001B[93m";
    public static final String BRIGHT_BLUE = "\u001B[94m";
    public static final String BRIGHT_MAGENTA = "\u001B[95m";
    public static final String BRIGHT_CYAN = "\u001B[96m";
    public static final String BRIGHT_WHITE = "\u001B[97m";

    // 背景色
    public static final String BG_BLACK = "\u001B[40m";
    public static final String BG_RED = "\u001B[41m";
    public static final String BG_GREEN = "\u001B[42m";
    public static final String BG_YELLOW = "\u001B[43m";
    public static final String BG_BLUE = "\u001B[44m";
    public static final String BG_MAGENTA = "\u001B[45m";
    public static final String BG_CYAN = "\u001B[46m";
    public static final String BG_WHITE = "\u001B[47m";

    //RGB扩展色（需终端支持）
    // 前景色 (38;2;R;G;B)
    public static final String ORANGE = "\u001B[38;2;255;165;0m";
    public static final String PINK = "\u001B[38;2;255;192;203m";
    public static final String GOLD = "\u001B[38;2;255;215;0m";
    public static final String SILVER = "\u001B[38;2;192;192;192m";
    public static final String DARK_RED = "\u001B[38;2;139;0;0m";
    public static final String FOREST_GREEN = "\u001B[38;2;34;139;34m";
    public static final String DARK_BLUE = "\u001B[38;2;0;0;139m";
    public static final String LAVENDER = "\u001B[38;2;230;230;250m";

    // 背景色 (48;2;R;G;B)
    public static final String BG_DARK_GRAY = "\u001B[48;2;50;50;50m";
    public static final String BG_BLOOD_RED = "\u001B[48;2;136;8;8m";
    public static final String BG_MIDNIGHT = "\u001B[48;2;25;25;112m";

}
